<?php
declare (strict_types = 1);

namespace app\adminapi\controller;

use app\adminapi\business\GoodsBusiness;
use app\adminapi\extend\tools\jwt\JWT;
use app\common\model\SpecValue;
use think\exception\HttpException;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\Filesystem;
use think\Request;

class Goods
{
    /**
     *
     * 显示资源列表
     *
     * 商品有关的信息
     *
     * @return \think\Response
     */
    public function index()
    {
        try {

            $limit = \request()->get('limit',5);
            if (!is_numeric($limit)) {
                abort(2001,'每页显示条数只能是整数');
            }
            $page = \request()->get('page',1);
            if (!is_numeric($page)) {
                abort(2001,'每页显示条数只能是整数');
            }

            $data = GoodsBusiness::list($limit);// 调用业务逻辑层
            return  success($data);
        }catch (ValidateException $validateException) {
            return fail($validateException->getCode(),$validateException->getMessage());
        }catch (HttpException $httpException) {
            return  fail($httpException->getStatusCode(),$httpException->getMessage());
        }
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        //
    }

    /**
     * 保存新建的资源
     *
     * 1、观察表单 构造数据
     * 2、 参数验证
     * 3、 参数处理
     * 4、 入库
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {

        try {
            # 接收参数
            $param = \request()->all();

            # 验证参数
            validate(\app\adminapi\validate\Goods::class)->check($param);
            # 商品logo验证 验证商品logo传过来的图片是否存在
            if (!file_exists('./'.$param['goods_logo'])) {
                abort(4004,'商品logo不存在');
            }

            # 验证相册的数据是否存在
            foreach ($param['goods_image'] as $image) {
                if (!file_exists('./'.$image)) {
                    abort(4004,'商品相册中'.$image.'不存在');
                }
            }
            # 验证规格信息
            $value_ids = array_keys($param['item']);
//            将id的值转化为一个数组
            $value_ids_arr = [];
            foreach ($value_ids as $value_id_str) {
                $value_ids_arr = array_merge(explode('_',$value_id_str),$value_ids_arr);
            }
           $value_ids_arr = array_unique($value_ids_arr);
           # 查询数据
            $checkItem = SpecValue::whereIn('id',$value_ids_arr)->select();
            # 判断的依据

            if (count($checkItem) != count($value_ids_arr)) {
                abort(2001,"规格信息有误");
            }
            # 验证属性 自己完成一下

            # 进行入库
            GoodsBusiness::addGoods($param);
            return  success();

        }catch (ValidateException $validateException) {
            return  fail($validateException->getCode(),$validateException->getMessage());
        }
        catch (HttpException $httpException) {
            return  fail($httpException->getStatusCode(),$httpException->getMessage());
        }


    }

    /**
     * 显示指定的资源
     * 商品详情的接口
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {

        try {
            if (!is_numeric($id)) {
                abort(2001,'商品id错误');
            }

            $info = GoodsBusiness::detail($id);


            return  success($info);

        }catch (ValidateException $validateException) {
            return  fail($validateException->getCode(),$validateException->getMessage());
        }
        catch (HttpException $httpException) {
            return  fail($httpException->getStatusCode(),$httpException->getMessage());
        }
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        //
    }
}
